#![allow(missing_docs)]

use semx_bitops::bitmap::BitMap;

#[test]
fn bitmap_test() {
    let mut bitmap = BitMap::create(10);
    bitmap.set_zero();
    assert!(bitmap.is_empty());
    assert!(!bitmap.is_full());

    bitmap.set_fill();
    assert_eq!(bitmap.count_one(), 10);
    assert!(!bitmap.is_empty());
    assert!(bitmap.is_full());

    bitmap.bitmap_clear(0, 2);
    assert_eq!(bitmap.count_one(), 8);
    assert!(!bitmap.is_empty());
    assert!(!bitmap.is_full());

    bitmap.set_fill();
    assert_eq!(bitmap.count_one(), 10);
    assert!(bitmap.is_full());
    assert!(!bitmap.is_empty());

    let mut bitmap = BitMap::create(100);
    bitmap.set_zero();
    assert!(bitmap.is_empty());
    assert!(!bitmap.is_full());

    bitmap.set_fill();
    assert_eq!(bitmap.count_one(), 100);
    assert!(!bitmap.is_empty());
    assert!(bitmap.is_full());

    bitmap.bitmap_clear(0, 2);
    assert_eq!(bitmap.count_one(), 98);
    assert!(!bitmap.is_empty());
    assert!(!bitmap.is_full());

    bitmap.set_fill();
    assert_eq!(bitmap.count_one(), 100);
    assert!(bitmap.is_full());
    assert!(!bitmap.is_empty());

    bitmap.set_zero();
    assert_eq!(bitmap.count_one(), 0);
    assert!(bitmap.is_empty());
    assert!(!bitmap.is_full());

    let mut copy = BitMap::create(100);
    copy.bitmap_set(32, 12);
    bitmap.copy_from(&copy);
    assert_eq!(bitmap.count_one(), 12);
    assert!(bitmap.is_equal(&copy));
    assert!(bitmap.is_intersects(&copy));
    copy.set_zero();
    copy.bitmap_set(50, 12);
    assert!(!bitmap.is_intersects(&copy));

    assert_eq!(bitmap.bitmap_find_next_zero_area(0, 30, 0), 0);
    bitmap.bitmap_set(15, 2);
    assert_eq!(bitmap.bitmap_find_next_zero_area(0, 30, 0), 44);

    bitmap.bitmap_extend_nr(100);
    bitmap.bitmap_set(150, 3);
    assert_eq!(bitmap.count_one(), 17);
}
